/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.mybeans;

 
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Date;
import javax.swing.JOptionPane;

/**
 *
 * @author avbravo
 *
 */
public class PagosMensualesBeans {

    static int Anio;
    static String Mes;
    static private String Id;
    static String TipoId;
    static String IdRegimen;
    static int IdRecibo;
    static String Activo;
    static String Pagado;
    static String IdMunicipio;
    static String IdUsuario;
    static Date Fecha;
    Sesion sesion;
    int NumeroMesAPagar = 0;
    int MesesSinPagar = 0;
    private int NumeroAniosPaga = 0;
    int IndicePrimerMes = 0;
    int MesesPaga = 0;
    int MesesSuperiorAnios = 0;
    int MesesResiduos = 0;
    double Pago = 0.0;
    double Exoneracion = 0.0;
    double Valor = 0.0;
    double ValorImpuesto = 0.0;
    double Deuda = 0.0;
    double Morosidad = 0.0;
    String PeriodoPago;
    String Estatus;
    static String MesPago;
    static int NumeroMes = 0;
    int AnioCalendario = 0; //  para los pagos de morosidad del año actual
    
    public PagosMensualesBeans() {
        sesion = new Sesion();
        }

    public int getAnioCalendario() {
        return AnioCalendario;
    }

    public void setAnioCalendario(int AnioCalendario) {
        this.AnioCalendario = AnioCalendario;
    }

    public double getMorosidad() {
        return Morosidad;
    }

    public void setMorosidad(double Morosidad) {
        this.Morosidad = Morosidad;
    }

    public static int getNumeroMes() {
        return NumeroMes;
    }

    public static void setNumeroMes(int NumeroMes) {
        PagosMensualesBeans.NumeroMes = NumeroMes;
    }

    public static String getMesPago() {
        return MesPago;
    }

    public static void setMesPago(String MesPago) {
        PagosMensualesBeans.MesPago = MesPago;
    }

    public int getNumeroMesAPagar() {
        return NumeroMesAPagar;
    }

    public void setNumeroMesAPagar(int NumeroMesAPagar) {
        this.NumeroMesAPagar = NumeroMesAPagar;
    }

    public static String getId() {
        return Id;
    }

    public static void setId(String Id) {
        PagosMensualesBeans.Id = Id;
    }

    public static String getActivo() {
        return Activo;
    }

    public static void setActivo(String Activo) {
        PagosMensualesBeans.Activo = Activo;
    }

    public static int getAnio() {
        return Anio;
    }

    public static void setAnio(int Anio) {
        PagosMensualesBeans.Anio = Anio;
    }

    public static Date getFecha() {
        return Fecha;
    }

    public static void setFecha(Date Fecha) {
        PagosMensualesBeans.Fecha = Fecha;
    }

    public static String getIdMunicipio() {
        return IdMunicipio;
    }

    public static void setIdMunicipio(String IdMunicipio) {
        PagosMensualesBeans.IdMunicipio = IdMunicipio;
    }

    public static int getIdRecibo() {
        return IdRecibo;
    }

    public static void setIdRecibo(int IdRecibo) {
        PagosMensualesBeans.IdRecibo = IdRecibo;
    }

    public static String getIdRegimen() {
        return IdRegimen;
    }

    public static void setIdRegimen(String IdRegimen) {
        PagosMensualesBeans.IdRegimen = IdRegimen;
    }

    public static String getIdUsuario() {
        return IdUsuario;
    }

    public static void setIdUsuario(String IdUsuario) {
        PagosMensualesBeans.IdUsuario = IdUsuario;
    }

    public static String getMes() {
        return Mes;
    }

    public static void setMes(String Mes) {
        PagosMensualesBeans.Mes = Mes;
    }

    public static String getPagado() {
        return Pagado;
    }

    public static void setPagado(String Pagado) {
        PagosMensualesBeans.Pagado = Pagado;
    }

    public static String getTipoId() {
        return TipoId;
    }

    public static void setTipoId(String TipoId) {
        PagosMensualesBeans.TipoId = TipoId;
    }

    /*
     *  VerificarPagoMensualEsteMes
     * Verifica si se pago el mes
     * 
     */
    public boolean VerificarNoPagoMensual() {
        try {
            if (sesion.Conectar() == false) {
                JOptionPane.showMessageDialog(null, "No se pudo establecer la conexion", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return false;
            }
            String sql = "select * from pagosmensuales where idmunicipio=? and anio =? and mes =? and id=? and tipoid =? and idregimen=? and activo='si' and pagado='no'";

            PreparedStatement psquery = sesion.con.prepareStatement(sql);
            psquery.setString(1, getIdMunicipio());
            psquery.setInt(2, getAnio());//anio
            psquery.setString(3, getMes());
            psquery.setString(4, getId());
            psquery.setString(5, getTipoId());
            psquery.setString(6, getIdRegimen());

            ResultSet rs = psquery.executeQuery();
            rs.next();
            int x = rs.getRow();

            if (x != 0) {
                sesion.con.close();
                return true;

            } else {
                sesion.con.close();
                return false;
            }

        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\nVerificarNoPagoMensual()\n " + ex.getMessage().toString());
        }
        return false;
    }

    /*
     *retorna el numero de meses sin pagar
     *
     */
    public int getNumeroMesesSinPagar() {
        try {
            if (sesion.Conectar() == false) {
                sesion.MostrarMensajeInformacion("Error", "No se pudo establecer la conexion");
                return -1;
            }
            String sql = "select * from pagosmensuales where idmunicipio=? and anio =? and id=? and tipoid =? and idregimen=? and activo='si' and pagado='no'";

            PreparedStatement psquery = sesion.con.prepareStatement(sql);
            psquery.setString(1, getIdMunicipio());
            psquery.setInt(2, getAnio());//anio
            psquery.setString(3, getId());
            psquery.setString(4, getTipoId());
            psquery.setString(5, getIdRegimen());

            ResultSet rs = psquery.executeQuery();
            rs.last();
            int x = rs.getRow();

            if (x != 0) {
                /*
                 * encontramos el ultimo mes que se pago
                 * se resta 12 ya que para el arreglo iniciara en 0
                 */
                this.NumeroMesAPagar = 12 - x;
                sesion.con.close();
                return x;

            } else {
                sesion.con.close();
                return 0;
            }

        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\nMetodo: getNumeroMesesSinPagar() " + ex.getMessage().toString());
        }
        return -1;
    }

    /*
     *
     *
     */
    public void ActualizarMesPagado(String sql) {
        try {
            if (sesion.Conectar() == false) {
                JOptionPane.showMessageDialog(null, "No se pudo establecer la conexion", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return;
            }

            PreparedStatement prest = sesion.con.prepareStatement(sql);
            prest.setString(1, getIdMunicipio());
            prest.setInt(2, getAnio());//anio
            prest.setString(3, getId());
            prest.setString(4, getTipoId());
            prest.setString(5, getIdRegimen());

            int count = prest.executeUpdate();
            sesion.con.close();

        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\nActualizarMesPagado()\n " + ex.getMessage().toString());
        }
        return;
    }

    public void ActualizarMesAnulado() {
        try {
            if (sesion.Conectar() == false) {
                JOptionPane.showMessageDialog(null, "No se pudo establecer la conexion", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return;
            }
            String sql = "update pagosmensuales set idrecibo=0 , pagado='no' where idmunicipio=?  and idrecibo=? and activo='si'";
            PreparedStatement prest = sesion.con.prepareStatement(sql);
            prest.setString(1, getIdMunicipio());
                   prest.setInt(2, getIdRecibo());

            int count = prest.executeUpdate();
            sesion.con.close();

        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\nActualizarMesAnulado()\n " + ex.getMessage().toString());
        }
        return;
    }

    public void ActualizarAnioPagado(String sql) {
        try {
            if (sesion.Conectar() == false) {
                JOptionPane.showMessageDialog(null, "No se pudo establecer la conexion", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return;
            }

            PreparedStatement prest = sesion.con.prepareStatement(sql);
            prest.setString(1, getIdMunicipio());
            prest.setInt(2, getAnio());//anio
            prest.setString(3, getId());
            prest.setString(4, getTipoId());
            prest.setString(5, getIdRegimen());
            int count = prest.executeUpdate();
            sesion.con.close();

        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\n ActualizarAnioPagado()\n " + ex.getMessage().toString());
        }
        return;
    }
    /*
     * ProcesarPagos()
     * procesa los pagos realizados y actualiza la
     * tabla de pagos mensuales, tambien si es necesario 
     * actualiza la tabla de pagos anuales.
     * Aqui se calculan los meses que paga.
     * 
     */

    public boolean ProcesarPagos() {
        try {

            for (int i = 0; i <= sesion.getNumeroRegistrosRecibosTable(); i++) {
                IdRegimen = sesion.ArrayRecibosTableIdRegimen[i];
                Estatus = sesion.ArrayRecibosTableEstatus[i];
                PeriodoPago = sesion.ArrayRecibosTablePeriodo[i];
                ValorImpuesto = sesion.ArrayRecibosTableValor[i];
                Pago = sesion.ArrayRecibosTablePagos[i];
                Deuda = sesion.ArrayRecibosTableDeuda[i];
                Exoneracion = sesion.ArrayRecibosTableExoneracion[i];
                Morosidad = sesion.ArrayRecibosTableSoloMorosidad[i];

                Estatus = Estatus.toLowerCase();
                PeriodoPago = PeriodoPago.toLowerCase();
                java.util.Calendar ca = java.util.Calendar.getInstance();
                java.sql.Date mydate = new java.sql.Date(ca.getTimeInMillis());
                this.AnioCalendario = ca.get(java.util.Calendar.YEAR);

                NumberFormat formatter = new DecimalFormat("#.00");
                String sDeuda = formatter.format(Deuda);
                String sPago = formatter.format(Pago);
                String sValorImpuesto = formatter.format(ValorImpuesto);
                String sExoneracion = formatter.format(Exoneracion);
                Deuda = Double.parseDouble(sDeuda);
                Pago = Double.parseDouble(sPago);
                ValorImpuesto = Double.parseDouble(sValorImpuesto);
                Exoneracion = Double.parseDouble(sExoneracion);


                /*
                 * 
                 *Encuentra los meses que debe, los que paga los años y el residuo
                 *
                 */
                //con esto nos aseguramos que se tome en cuenta la exoneracion
                Pago = Exoneracion + Pago;
                this.Anio = sesion.getAnioRecibo();
                this.MesesSinPagar = getNumeroMesesSinPagar();
                this.MesesPaga = (int) ((Pago) / ValorImpuesto);
                this.NumeroAniosPaga = MesesPaga / 12;
                this.MesesResiduos = MesesPaga % 12;


                if (Estatus.equals("sin morosidad") && PeriodoPago.equals("mensual")) {
                    ProcesarSinMorosidadMensual();
                } else {
                    if (Estatus.equals("morosidad") && PeriodoPago.equals("mensual")) {
                        ProcesarMorosidadMensual();
                    } else {
                        if (Estatus.equals("sin morosidad") && PeriodoPago.equals("anual")) {
                            ProcesarSinMorosidadAnual();
                        } else {
                            if (Estatus.equals("morosidad") && PeriodoPago.equals("anual")) {
                            } else {
                                if (Estatus.equals("recargo")) {
                                    ProcesarRecargo();
                                } else {
                                    if (Estatus.equals("vigenciasexpiradas")) {
                                        ProcesarVigenciasExpiradas();
                                    }
                                }
                            }
                        }
                    }

                }

            } //for

        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\nProcesarPagos()\n " + ex.getMessage().toString());
        }
        return false;
    }

    /*
     *
     *procesa la morosidad  mensual
     *
     */
    private void ProcesarSinMorosidadMensual() {
        try {


            ControlarPagosRegistros();


        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\nProcesarSinMorosidadMensual()\n " + ex.getMessage().toString());
        }
    }

    private void ProcesarSinMorosidadAnual() {
        try {


            ControlarPagosRegistrosAnuales();


        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\nProcesarSinMorosidadMensual()\n " + ex.getMessage().toString());
        }
    }

    /*
     *
     *
     *
     */
    private void ControlarPagosRegistros() {
        try {
            if (this.MesesSinPagar == 0) {
                //no debia ningun mes este año
                // procesar los pagos para el proximo año
                CrearRegimenProximoAnio();
            }
            int contadorMes = getNumeroMesAPagar();
            //solo paga para este año
            for (int i = 0; i < MesesPaga; i++) {
                String mes = sesion.getNombreMes(contadorMes);
                String sqlUpdate = "update pagosmensuales set pagado ='si' ,idrecibo = '" + IdRecibo + "'  where idmunicipio=? and anio =? and id=? and tipoid =? and idregimen=? and mes = '" + mes + "' and activo='si' and pagado='no'";
                ActualizarMesPagado(sqlUpdate);
                contadorMes++;
                if (contadorMes <= 11) {
                } else {
                    contadorMes = 0;
                    CrearRegimenProximoAnio();
                }
            }//for
        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\nPagaMenosAnio()\n " + ex.getMessage().toString());
        }
    }

    private void ControlarPagosRegistrosAnuales() {
        try {
            String sqlUpdate = "update pagosanuales set pagado ='si' ,idrecibo = '" + IdRecibo + "'  where idmunicipio=? and anio =? and id=? and tipoid =? and idregimen=? and activo='si' and pagado='no'";
            ActualizarAnioPagado(sqlUpdate);
        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\nPagaMenosAnio()\n " + ex.getMessage().toString());
        }
    }

    /*
     *
     * CrearRegimenProximioAnio()
     *
     */
    private void CrearRegimenProximoAnio() {
        try {

            int oldIdRecibo = this.IdRecibo;
            this.Anio = this.Anio + 1;

            String[] arrayMes = sesion.getArrayMeses();
            setAnio(Anio);
            setPagado("no");
            //    while (VerificarExisteAlgunRegistroMensual() == false) {
            //        this.Anio++;
            //        setAnio(this.Anio);
            //    }

            for (int m = 0; m < 12; m++) {

                setMes(arrayMes[m]);
                setIdRecibo(0);
                setNumeroMes(m);
                AgregarPagosMensuales();

            }
            this.IdRecibo = oldIdRecibo;
            this.NumeroMesAPagar = 0;
            /*
             *para calcular para el proximo año lo que no ha pagado 
             */
            getNumeroMesesSinPagar();

            //para iniciar en enero del proximo año
        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\nCrearRegimenProximoAnio()\n " + ex.getMessage().toString());
        }

    }

    /*
     *
     *AgregarPagosMensuales
     *
     */
    public boolean AgregarPagosMensuales() {
        try {
            if (VerificarExisteRegistroPagoMensual() == true) {
                //Ya fue agregado para ese año
                return false;
            }

            if (sesion.Conectar() == false) {
                sesion.MostrarMensajeAdvertencia("Error", "No se pudo establecer la conexion");
                return false;
            }

            String sql = "INSERT into pagosmensuales  VALUES(?,?,?,?,?,?,?,?,?,?,?,?)";
            PreparedStatement prest = sesion.con.prepareStatement(sql);

            prest.setInt(1, getAnio());//anio
            prest.setString(2, getMes());
            prest.setString(3, getId());
            prest.setString(4, getTipoId());
            prest.setString(5, getIdRegimen());
            prest.setInt(6, getIdRecibo()); //idrecibo
            prest.setString(7, "si"); //activo
            prest.setString(8, getPagado()); //pagado
            prest.setString(9, sesion.getIdmunicipio());
            prest.setString(10, sesion.getUsername());

            java.util.Calendar ca = java.util.Calendar.getInstance();
            java.sql.Date mydate = new java.sql.Date(ca.getTimeInMillis());
            prest.setDate(11, mydate);
            prest.setInt(12, this.NumeroMes);
            int count = prest.executeUpdate();

            sesion.con.close();
            // JOptionPane.showMessageDialog(null, "Regimen guardado exitosamente", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
            return true;

        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\n AgregarPagosMensuales()\n " + ex.getMessage().toString());
        }

        return false;
    }

     public boolean AgregarPagosMensualesSinMensajes() {
        try {
            if (VerificarExisteRegistroPagoMensualSinMensaje() == true) {
                //Ya fue agregado para ese año
                return false;
            }

            if (sesion.Conectar() == false) {
                sesion.MostrarMensajeAdvertencia("Error", "No se pudo establecer la conexion");
                return false;
            }

            String sql = "INSERT into pagosmensuales " +
                    " (anio,mes,id,tipoid,idregimen,idrecibo, "+
                    " activo,pagado,idmunicipio,idusuario,fecha,numeromes )"
                    +" VALUES(?,?,?,?,?,?,?,?,?,?,?,?)";
            PreparedStatement prest = sesion.con.prepareStatement(sql);

            prest.setInt(1, getAnio());//anio
            prest.setString(2, getMes());
            prest.setString(3, getId());
            prest.setString(4, getTipoId());
            prest.setString(5, getIdRegimen());
            prest.setInt(6, getIdRecibo()); //idrecibo
            prest.setString(7, getActivo()); //activo
            prest.setString(8, getPagado()); //pagado
            prest.setString(9, sesion.getIdmunicipio());
            prest.setString(10, sesion.getUsername());

            java.util.Calendar ca = java.util.Calendar.getInstance();
            java.sql.Date mydate = new java.sql.Date(ca.getTimeInMillis());
            prest.setDate(11, mydate);
            prest.setInt(12, this.NumeroMes);
            int count = prest.executeUpdate();

            sesion.con.close();
            // JOptionPane.showMessageDialog(null, "Regimen guardado exitosamente", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
            return true;

        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\n AgregarPagosMensuales()\n " + ex.getMessage().toString());
        }

        return false;
    }

    /*
     *
     *AgregarPagosAnuales
     *
     */
    public boolean AgregarPagosAnuales() {
        try {
            if (sesion.Conectar() == false) {
                JOptionPane.showMessageDialog(null, "No se pudo establecer la conexion", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return false;
            }

            String sql = "INSERT into pagosanuales VALUES(?,?,?,?,?,?,?,?,?,?,?)";
            PreparedStatement prest = sesion.con.prepareStatement(sql);
            if (getPagado() == null || getPagado().equals("")) {
                this.Pagado = "no";
            }
            prest.setInt(1, getAnio());//anio
            prest.setString(2, getMesPago());
            prest.setString(3, getId());
            prest.setString(4, getTipoId());
            prest.setString(5, getIdRegimen());
            prest.setInt(6, getIdRecibo()); //idrecibo
            prest.setString(7, "si"); //activo
            prest.setString(8, getPagado()); //pagado
            prest.setString(9, sesion.getIdmunicipio());
            prest.setString(10, sesion.getUsername());

            java.util.Calendar ca = java.util.Calendar.getInstance();
            java.sql.Date mydate = new java.sql.Date(ca.getTimeInMillis());
            prest.setDate(11, mydate);

            int count = prest.executeUpdate();

            sesion.con.close();
            // JOptionPane.showMessageDialog(null, "Regimen guardado exitosamente", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
            return true;

        } catch (Exception ex) {
            System.out.println("Error Clase: PagosMensualesBeans.java\n AgregarPagosAnuales()\n " + ex.getMessage().toString());
//            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\n AgregarPagosAnuales()\n " + ex.getMessage().toString());
        }

        return false;
    }


      public boolean AgregarPagosAnualesSinMensajes() {
        try {
             if (VerificarExisteRegistroPagoAnualSinMensaje() == true) {
                //Ya fue agregado para ese año
                return false;
            }
            if (sesion.Conectar() == false) {
                JOptionPane.showMessageDialog(null, "No se pudo establecer la conexion", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return false;
            }

            String sql = "INSERT into pagosanuales  "+
                    "(anio,mes,id,tipoid,idregimen,idrecibo," +
                    "activo,pagado,idmunicipio,idusuario,fecha) " +
                    "VALUES(?,?,?,?,?,?,?,?,?,?,?)";
            PreparedStatement prest = sesion.con.prepareStatement(sql);
            if (getPagado() == null || getPagado().equals("")) {
                this.Pagado = "no";
            }
            prest.setInt(1, getAnio());//anio
            prest.setString(2, getMesPago());
            prest.setString(3, getId());
            prest.setString(4, getTipoId());
            prest.setString(5, getIdRegimen());
            prest.setInt(6, getIdRecibo()); //idrecibo
            prest.setString(7, getActivo()); //activo
            prest.setString(8, getPagado()); //pagado
            prest.setString(9, sesion.getIdmunicipio());
            prest.setString(10, sesion.getUsername());

            java.util.Calendar ca = java.util.Calendar.getInstance();
            java.sql.Date mydate = new java.sql.Date(ca.getTimeInMillis());
            prest.setDate(11, mydate);

            int count = prest.executeUpdate();

            sesion.con.close();
            // JOptionPane.showMessageDialog(null, "Regimen guardado exitosamente", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
            return true;

        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\n AgregarPagosAnuales()\n " + ex.getMessage().toString());
        }

        return false;
    }

    /*
     *
     * VerificarExisteRegistroPagoMensual()
     */
    public boolean VerificarExisteRegistroPagoMensual() {
        try {
            if (sesion.Conectar() == false) {
                JOptionPane.showMessageDialog(null, "No se pudo establecer la conexion", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return false;
            }

            String sqlquery = "select * from pagosmensuales where idmunicipio = ? and id =? and tipoid='"+this.TipoId+"' and anio=? and idregimen =? and mes=? ";
            PreparedStatement psquery = sesion.con.prepareStatement(sqlquery);
            psquery.setString(1, sesion.getIdmunicipio());
            psquery.setString(2, getId());
            psquery.setInt(3, getAnio());
            psquery.setString(4, getIdRegimen());
            psquery.setString(5, getMes());
            ResultSet rs = psquery.executeQuery();
            rs.next();
            int x = rs.getRow();

            if (x != 0) {
                String activo = rs.getString("activo");
                if (activo.equals("no")) {
                    sesion.MostrarMensajeInformacion("Impuesto Inactivo ", "Este impuesto ya fue asignado a este contribuyente pero esta inactivo.\n Utilice la opcion de activar impuestos");
                    sesion.con.close();
                    return true;
                }

                sesion.con.close();
                return true;
            } else {
                sesion.con.close();
                return false;
            }

        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\n VerificarExisteRegistroPagoMensual()\n " + ex.getMessage().toString());
        }
        return false;
    }

       public boolean VerificarExisteRegistroPagoMensualSinMensaje() {
        try {
            if (sesion.Conectar() == false) {
                JOptionPane.showMessageDialog(null, "No se pudo establecer la conexion", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return false;
            }

            String sqlquery = "select * from pagosmensuales where idmunicipio = ? and id =? and tipoid='"+this.TipoId+"' and anio=? and idregimen =? and mes=? ";
            PreparedStatement psquery = sesion.con.prepareStatement(sqlquery);
            psquery.setString(1, sesion.getIdmunicipio());
            psquery.setString(2, getId());
            psquery.setInt(3, getAnio());
            psquery.setString(4, getIdRegimen());
            psquery.setString(5, getMes());
            ResultSet rs = psquery.executeQuery();
            rs.next();
            int x = rs.getRow();

            if (x != 0) {
                String activo = rs.getString("activo");
                if (activo.equals("no")) {
                 //   sesion.MostrarMensajeInformacion("Impuesto Inactivo ", "Este impuesto ya fue asignado a este contribuyente pero esta inactivo.\n Utilice la opcion de activar impuestos");
                    sesion.con.close();
                    return true;
                }

                sesion.con.close();
                return true;
            } else {
                sesion.con.close();
                return false;
            }

        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\n VerificarExisteRegistroPagoMensualSinMensajes()\n " + ex.getMessage().toString());
        }
        return false;
    }


          public boolean VerificarExisteRegistroPagoAnualSinMensaje() {
        try {
            if (sesion.Conectar() == false) {
                JOptionPane.showMessageDialog(null, "No se pudo establecer la conexion", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return false;
            }

            String sqlquery = "select * from pagosanuales where idmunicipio = ? and id =? and tipoid='"+this.TipoId+"' and anio=? and idregimen =? and mes=? ";
            PreparedStatement psquery = sesion.con.prepareStatement(sqlquery);
            psquery.setString(1, sesion.getIdmunicipio());
            psquery.setString(2, getId());
            psquery.setInt(3, getAnio());
            psquery.setString(4, getIdRegimen());
            psquery.setString(5, getMes());
            ResultSet rs = psquery.executeQuery();
            rs.next();
            int x = rs.getRow();

            if (x != 0) {
                String activo = rs.getString("activo");
                if (activo.equals("no")) {
                 //   sesion.MostrarMensajeInformacion("Impuesto Inactivo ", "Este impuesto ya fue asignado a este contribuyente pero esta inactivo.\n Utilice la opcion de activar impuestos");
                    sesion.con.close();
                    return true;
                }

                sesion.con.close();
                return true;
            } else {
                sesion.con.close();
                return false;
            }

        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\n VerificarExisteRegistroPagoAnualSinMensajes()\n " + ex.getMessage().toString());
        }
        return false;
    }

    public boolean VerificarExisteAlgunRegistroMensual() {
        try {
            if (sesion.Conectar() == false) {
                JOptionPane.showMessageDialog(null, "No se pudo establecer la conexion", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return false;
            }

            String sqlquery = "select * from pagosmensuales where idmunicipio = ? and id =?  and tipoid='"+this.TipoId+"'  and anio=? and idregimen =? ";
            PreparedStatement psquery = sesion.con.prepareStatement(sqlquery);
            psquery.setString(1, sesion.getIdmunicipio());
            psquery.setString(2, getId());
            psquery.setInt(3, getAnio());
            psquery.setString(4, getIdRegimen());
            ResultSet rs = psquery.executeQuery();
            rs.next();
            int x = rs.getRow();

            if (x != 0) {
                String activo = rs.getString("activo");
                if (activo.equals("no")) {
                    sesion.MostrarMensajeInformacion("Impuesto Inactivo ", "Este impuesto ya fue asignado a este contribuyente pero esta inactivo.\n Utilice la opcion de activar impuestos");
                    sesion.con.close();
                    return true;
                }

                sesion.con.close();
                return true;
            } else {
                sesion.con.close();
                return false;
            }

        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\n VerificarExisteRegistroPagoMensual()\n " + ex.getMessage().toString());
        }
        return false;
    }

    public void ActualizarRegistroVigenciasExpiradas(String sql) {
        try {
            if (sesion.Conectar() == false) {
                JOptionPane.showMessageDialog(null, "No se pudo establecer la conexion", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return;
            }

            PreparedStatement prest = sesion.con.prepareStatement(sql);
            prest.setString(1, getIdMunicipio());
            prest.setInt(2, getAnioCalendario());//anio
            prest.setString(3, getId());
            prest.setString(4, getTipoId());
            prest.setString(5, getIdRegimen());

            int count = prest.executeUpdate();
            sesion.con.close();

        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\nActualizarRegistro()\n " + ex.getMessage().toString());
        }
        return;
    }

    /*
     *
     *procesa el recargo
     *
     */
    private void ProcesarRecargo() {
        try {
            double recargoactual = Deuda - Pago;
            String sqlUpdate = "update recargomensual set recargoactual = '" + recargoactual + "'  where idmunicipio=? and anio =? and id=? and tipoid =? and idregimen=? ";
            ActualizarRegistroRecargo(sqlUpdate);
        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\nProcesarRecargo()\n " + ex.getMessage().toString());
        }
    }

    public void ActualizarRegistroRecargo(String sql) {
        try {
            if (sesion.Conectar() == false) {
                JOptionPane.showMessageDialog(null, "No se pudo establecer la conexion", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return;
            }

            PreparedStatement prest = sesion.con.prepareStatement(sql);
            prest.setString(1, getIdMunicipio());
            prest.setInt(2, getAnioCalendario());//anio
            prest.setString(3, getId());
            prest.setString(4, getTipoId());
            prest.setString(5, getIdRegimen());

            int count = prest.executeUpdate();
            sesion.con.close();

        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\nActualizarRegistro()\n " + ex.getMessage().toString());
        }
        return;
    }

    /*
     *
     *procesa el recargo
     *
     */
    private void ProcesarVigenciasExpiradas() {
        try {
            NumberFormat formatter = new DecimalFormat("#.00");
            String sDeuda = formatter.format(Deuda);
            String sPago = formatter.format(Pago);
            Deuda = Double.parseDouble(sDeuda);
            Pago = Double.parseDouble(sPago);
            double morosidadactual = Deuda - Pago;

            String sqlUpdate = "update vigenciasexpiradas set morosidadactual = '" + morosidadactual + "'  where idmunicipio=? and anio =? and id=? and tipoid =? and idregimen=? ";

            ActualizarRegistroVigenciasExpiradas(sqlUpdate);
        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\nProcesarVigenciasExpiradas()\n " + ex.getMessage().toString());
        }
    }

    /*
     *
     * morosidad mensual
     *
     */
    private void ProcesarMorosidadMensual() {
        try {
            ControlarPagosRegistros();
            ActualizarMorosidad();


            //}
        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\nProcesarMorosidadMensual()()\n " + ex.getMessage().toString());
        }
    }

    private void ActualizarMorosidad() {
        try {
            NumberFormat formatter = new DecimalFormat("#.00");
            String sDeuda = formatter.format(Deuda);
            String sPago = formatter.format(Pago);
            String sMorosidad = formatter.format(Morosidad);
            Deuda = Double.parseDouble(sDeuda);
            Pago = Double.parseDouble(sPago);
            Morosidad = Double.parseDouble(sMorosidad);

            /*
             * se quita el valor del mes actual, para actualizar la morosidad con los valores que corresponden solo a morosidad
             */
            double saldoactual = Morosidad - Pago;
            String sqlUpdate;
            if (saldoactual < 0) {
                //quiere decir que cancelo toda la morosidad y pago de mas
                //asi que lo demas no interesa ya que corresponde a otros pagos
                saldoactual = 0.0;
            }

            sqlUpdate = "update morosidadmensual set saldoactual = '" + saldoactual + "'  where idmunicipio=? and anio =? and id=? and tipoid =? and idregimen=? ";

            if (sesion.Conectar() == false) {
                JOptionPane.showMessageDialog(null, "No se pudo establecer la conexion", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
                return;
            }

            PreparedStatement prest = sesion.con.prepareStatement(sqlUpdate);
            prest.setString(1, getIdMunicipio());
            prest.setInt(2, getAnioCalendario());//anio
            prest.setString(3, getId());
            prest.setString(4, getTipoId());
            prest.setString(5, getIdRegimen());

            int count = prest.executeUpdate();
            sesion.con.close();
        } catch (Exception ex) {
            sesion.MostrarMensajeError("Error ", "Clase: PagosMensualesBeans.java\nActualizarMorosidad()\n " + ex.getMessage().toString());
        }
    }
} //class

